/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.seguridad.controlador;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import sv.com.intesal.clases.Mensaje;
import sv.com.intesal.conexion.cConexion;
import sv.com.intesal.seguridad.bean.ParametroSicopi;
import sv.com.intesal.seguridad.sql.SQLParametroSicopi;

/**
 *
 * @author ejerez
 */
public class ParametroSicopiControlador {

    public List<ParametroSicopi> fillGrid() throws Exception {
        List<ParametroSicopi> lista = new ArrayList<ParametroSicopi>();
        try {
            ResultSet rs = cConexion.conectar().prepareStatement(SQLParametroSicopi.getParametrosSicopi).executeQuery();
            while (rs.next()) {
                ParametroSicopi ps = new ParametroSicopi();
                ps.setCodigo_ps(rs.getInt("codigo_ps"));
                ps.setBloque_ps(rs.getInt("bloque_ps"));
                ps.setCorrelativo_ps(rs.getInt("correlativo_ps"));

                /*TIPO_PARAMETRO*/
                ps.setCodigo_tp(rs.getInt("codigo_tp"));
                ps.setNombre_tp(rs.getString("nombre_tp"));
                ps.setDescripcion_tp(rs.getString("descripcion_tp"));

                /*SUCURSAL*/
                ps.setCodigo_s(rs.getInt("codigo_s"));
                ps.setNombre_s(rs.getString("nombre_s"));

                lista.add(ps);
            }

            rs.close();
            return lista;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void mantenimiento(ParametroSicopi ps) throws Exception {

        try {

            PreparedStatement psta = null;
            if (ps.getCodigo_ps() == null) {
                psta = cConexion.conectar().prepareCall(SQLParametroSicopi.insert);
                psta.setInt(4, ps.getCodigo_s());
            } else {
                psta = cConexion.conectar().prepareCall(SQLParametroSicopi.update);
                psta.setInt(4, ps.getCodigo_ps());
            }
            psta.setInt(1, ps.getCodigo_tp());
            psta.setInt(2, ps.getBloque_ps());
            psta.setInt(3, ps.getCorrelativo_ps());
            psta.executeUpdate();
            psta.close();

            Mensaje m = new Mensaje();
            if (ps.getCodigo_ps() == null) {
                m.messageInfo(m.getIinformation());
            } else {
                m.messageInfo(m.getImodificada());
            }
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public Boolean validarSucursal(ParametroSicopi pas) throws Exception {
        try {
            PreparedStatement ps = cConexion.conectar().prepareStatement(SQLParametroSicopi.validarSucursal_y_TipoParametro);
            ps.setInt(1, pas.getCodigo_s());
            ps.setInt(2, pas.getCodigo_tp());

            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                if (rs.getInt("contar") >= 1) {
                    return false;
                }
            }
            return true;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public ParametroSicopi getParametroSicopi(String nombre) throws Exception {
        ParametroSicopi ps = null;
        try {
            PreparedStatement psta = cConexion.conectar().prepareStatement(SQLParametroSicopi.getParametroSicopi_x_Nombre);
            psta.setString(1, nombre);
            ResultSet rs = psta.executeQuery();

            while (rs.next()) {
                ps = new ParametroSicopi();
                ps.setCodigo_ps(rs.getInt("codigo_ps"));
                ps.setBloque_ps(rs.getInt("bloque_ps"));
                ps.setCorrelativo_ps(rs.getInt("correlativo_ps"));

                /*TIPO_PARAMETRO*/
                ps.setCodigo_tp(rs.getInt("codigo_tp"));
                ps.setNombre_tp(rs.getString("nombre_tp"));
                ps.setDescripcion_tp(rs.getString("descripcion_tp"));

                /*SUCURSAL*/
                ps.setCodigo_s(rs.getInt("codigo_s"));
                ps.setNombre_s(rs.getString("nombre_s"));
            }

            return ps;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void updateCorrelativo(String nombre_correlativo) throws Exception {

        try {
            SessionControlador sc = new SessionControlador();

            PreparedStatement ps = cConexion.conectar().prepareStatement(SQLParametroSicopi.updateCorrelativo);
            ps.setString(1, nombre_correlativo);
            ps.setInt(2, sc.getCodigo_Sucursal());

            ps.executeUpdate();
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public List<ParametroSicopi> getParametroSicopi_x_Sucursal() throws Exception {
        List<ParametroSicopi> lista = new ArrayList<ParametroSicopi>();
        try {
            SessionControlador sc = new SessionControlador();
            PreparedStatement psta = cConexion.conectar().prepareStatement(SQLParametroSicopi.getParametrosSicopi_x_Sucursal);
            psta.setInt(1, sc.getCodigo_Sucursal());

            ResultSet rs = psta.executeQuery();
            while (rs.next()) {
                ParametroSicopi ps = new ParametroSicopi();
                ps.setCodigo_ps(rs.getInt("codigo_ps"));
                ps.setBloque_ps(rs.getInt("bloque_ps"));
                ps.setCorrelativo_ps(rs.getInt("correlativo_ps"));

                /*TIPO_PARAMETRO*/
                ps.setCodigo_tp(rs.getInt("codigo_tp"));
                ps.setNombre_tp(rs.getString("nombre_tp"));
                ps.setDescripcion_tp(rs.getString("descripcion_tp"));

                /*SUCURSAL*/
                ps.setCodigo_s(rs.getInt("codigo_s"));
                ps.setNombre_s(rs.getString("nombre_s"));

                lista.add(ps);
            }

            rs.close();
            return lista;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }
}
